/**
 * 控件基类
 * 所有自定义控件的基础类
 * @class
 * @example
 * // 创建自定义控件
 * class MyControl extends ControlBase {
 *   // 实现控件功能
 *   init(viewer) {
 *     super.init(viewer);
 *     // 创建DOM元素并赋值给this._container
 *     this._container = document.createElement('div');
 *     return this;
 *   }
 * }
 */
export class ControlBase {
  /**
   * 构造函数
   * @constructor
   * @param {Object} options - 控件配置选项
   */
  constructor(options = {}) {
    this.options = options;
    this._container = null;
  }

  /**
   * 初始化控件
   * @param {external:Cesium.Viewer} viewer - Cesium Viewer实例
   * @returns {this}
   */
  init(viewer) {
    this.viewer = viewer;
    return this;
  }

  /**
   * 获取控件容器元素
   * @protected
   * @returns {HTMLElement|null} 控件容器DOM元素
   */
  _getContainer() {
    return this._container;
  }

  /**
   * 设置控件容器元素
   * @protected
   * @param {HTMLElement} container - 控件容器DOM元素
   * @returns {void}
   */
  _setContainer(container) {
    this._container = container;
  }

  /**
   * 显示控件
   * @returns {this}
   */
  show() {
    const container = this._getContainer();
    if (container) {
      container.style.display = "inline-block";
    }
    return this;
  }

  /**
   * 隐藏控件
   * @returns {this}
   */
  hide() {
    const container = this._getContainer();
    if (container) {
      container.style.display = "none";
    }
    return this;
  }

  /**
   * 切换控件显示状态
   * @returns {this}
   */
  toggle() {
    const container = this._getContainer();
    if (container) {
      container.style.display = container.style.display === "none" ? "inline-block" : "none";
    }
    return this;
  }

  /**
   * 获取控件是否可见
   * @returns {boolean} 控件是否可见
   */
  isVisible() {
    const container = this._getContainer();
    return container && container.style.display !== "none";
  }

  /**
   * 销毁控件，清理资源
   * @returns {void}
   */
  destroy() {
    // 基类只处理通用资源清理
    // 子类应该在自己的destroy方法中清理特定资源，然后调用super.destroy()
    if (this._container && this._container.parentNode) {
      this._container.parentNode.removeChild(this._container);
    }
    
    // 清理引用
    this._container = null;
    this.viewer = null;
    this.options = null;
  }
}